﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ScarecrowLibrary
{
    public static class scStringTools
    {
        /// <summary>
        /// Crea una stringa formattata dati un numero ed una unità di misura.
        /// </summary>
        /// <param name="value">Valore da formattare</param>
        /// <param name="unit">Unità di misura</param>
        /// <returns></returns>
        public static string FormatUnit(UInt64 value, string unit)
        {
            //Unità di scala.
            const int bytesScale = 1024;
            //Ordini di grandezza
            string[] orders = new string[] { "G", "M", "K", "" };
            //Numero più grande ottenibile.
            UInt64 max = (UInt64)System.Math.Pow(bytesScale, orders.Length - 1);

            //Per ogni ordine di grandezza
            foreach (string order in orders)
            {
                //Se il valore inserito è più grande del numero più grande ottenibile
                if (value > max)
                    //Restituisci una stringa formata dal numero diviso l'ordine di grandezza più l'unità base
                    return string.Format("{0:##.##} {1}", decimal.Divide(value, max), order) + unit;
                //Altrimenti scorri ancora gli ordini di grandezza diminuendo il divisore.
                max /= bytesScale;
            }
            //Se non sono mai uscito allora il numero è 0 o c'è un errore.
            return "0 " + unit;
        }
    }
}
